/********************************************************/
/*	Author:		gong_libin			*/
/*	Date:		2017_11_01			*/
/*	File:		CmMysql.h			*/
/********************************************************/

#ifndef	_CMMYSQL_H
#define	_CMMYSQL_H

#include "CmGlobal.h"
#include <mysql/mysql.h>

class CCmMysql
{
public:
	CCmMysql() {};
	virtual ~CCmMysql() {};

	void CmMysqlClose() {mysql_close(&m_stMysql);}
	char* CmMysqlError() {return (char*)mysql_error(&m_stMysql);}
	int CmMysqlInsert(char* pszSql) {return CmMysqlQuery(pszSql);}
	int CmMysqlUpdate(char* pszSql) {return CmMysqlQuery(pszSql);}
	int CmMysqlDelete(char* pszSql) {return CmMysqlQuery(pszSql);}
	void CmMysqlFree(void* pResult) {mysql_free_result((MYSQL_RES*)pResult);}

	void* CmMysqlSelect(char* pszSql);
	int CmMysqlConnect(char* pszHost, char* pszPort, char* pszUser, char* pszPass);

protected:
	MYSQL	m_stMysql;

private:
	int CmMysqlQuery(char* pszSql);

};

void* CCmMysql::CmMysqlSelect(char* pszSql)
{
	void* pReturn = NULL;

	if (CM_SUCCESS == CmMysqlQuery(pszSql)) {
		pReturn = (void*)mysql_store_result(&m_stMysql);
	}

	return pReturn;
}

int CCmMysql::CmMysqlConnect(char* pszHost, char* pszPort, char* pszUser, char* pszPass)
{
	int iReturn = CM_SUCCESS;

	if (NULL != mysql_init(&m_stMysql) ){
		if (NULL ==  mysql_real_connect(&m_stMysql, pszHost, pszUser, pszPass, NULL, atoi(pszPort), NULL, 0)) {
			CM_ERROR("%s\n", strerror(errno));
			iReturn = CM_FAILURE;
		}
	}
	else {
		CM_ERROR("%s\n", strerror(errno));
		iReturn = CM_FAILURE;
	}

	return iReturn;
}

int CCmMysql::CmMysqlQuery(char* pszSql)
{
	if (CM_SUCCESS != mysql_query(&m_stMysql, pszSql)) {
		CM_ERROR("%s\n", CmMysqlError());
		return CM_FAILURE;
	}

	return CM_SUCCESS;
}

#endif /* _CMMYSQL_H */
